10 ! ***********************
11 !
12 !        HOPPY V
13 !     a Froger Clone
14 !     (C) 84/97 BY
15 !     CARSTEN ZIEPKE
16 !
17 ! IT IS FREEWARE NOW !
18 ! FEEL FREE TO SPREAD IT
19 ! IF U LIKE IT SEND ME AN
20 ! EMAIL, A POSTCARD OR
21 ! WHATEVER YOU WANT
22 !
23 ! YOU NEED:
24 ! TI99/4A
25 ! TI EXTENDED BASIC
26 ! TI JOYSTICK #1
27 !
28 ! GOAL:
29 ! HELP HOPPY TO CROSS THE
30 ! THE ROAD AND THE RIVER
31 !
32 ! USAGE:
33 ! PRESS FIRE DURING MUSIC
34 ! SELECT SLOW OR FAST
35 ! GAME
36 ! SLOW: MOVE STICK TO
37 !       LEFT
38 !
39 ! FAST: MOVE STICK TO
40 !       RIGHT
41 !
42 ! MOVE HOPPY WITH THE
43 ! JOYSTICK
44 !
45 ! cziepke@ki.comcity.de
46 ! WESTRING 268
47 ! D-24116 KIEL
48 ! GERMANY
49 !
50 ! ***********************
51 !
100 CALL CLEAR :: CALL SCREEN(2) :: GOTO 170
110 CALL CLEAR :: CALL SCREEN :: CALL COLOR :: CALL MAGNIFY :: CALL HCHAR :: CALL MUSIK :: CALL VCHAR :: CALL SPRITE :: CALL MOTION
120 CALL COINC :: CALL CHAR :: CALL PATTERN :: CALL KEY :: CALL JOYST :: CALL POSITION :: CALL LOCATE :: CALL SOUND :: CALL DELSPRITE
130 HHH,CIO,COI,S,I,K,X$,GFA,STU,SCHLANG,KAF1,KAF2,KAF3,LAST,RENN,PU,HI,TIME,LOCH,LEB,A$,ZZ,VV,XX,YY,NPU,KK
140 DATA 250,349,294,250,466,294,125,466,294,125,523,311,250,587,349,250,466,294,250,698,349,250,698,262
150 DIM LAE(38),TON1(38),TON2(38)
160 !@P-
170 RANDOMIZE
180 DATA 375,587,349,125,587,349,250,622,392,125,698,392,125,622,349,125,587,349,125,622,349,250,698,349
190 DATA 125,523,440,125,466,392,125,523,440,125,587,466,250,523,440,250,349,349,250,466,294,125,466,294
200 DATA 125,523,311,250,587,311,250,466,294,250,698,349,250,698,262,375,587,349,125,587,349,125,622,392
210 DATA 125,698,392,125,587,349,125,622,349,375,523,349,125,466,349,750,466,349
220 FOR I=1 TO 38 :: READ LAE(I),TON1(I),TON2(I) :: NEXT I
230 FOR I=0 TO 14 :: CALL COLOR(I,16,2) :: NEXT I :: CALL COLOR(4,2,2)
240 CALL CHAR(63,"FFFFFFFFFFFFFFFF3C4299A1A199423C")
250 CALL VCHAR(3,2,63,5) :: CALL VCHAR(3,5,63,5) :: CALL HCHAR(5,3,63,3)
260 CALL VCHAR(4,7,63,3) :: CALL VCHAR(4,10,63,3) :: CALL HCHAR(3,8,63,2) :: CALL HCHAR(7,8,63,2)
270 CALL VCHAR(3,12,63,5) :: CALL HCHAR(3,13,63,2) :: CALL HCHAR(5,13,63,2) :: CALL VCHAR(4,14,63)
280 CALL VCHAR(3,16,63,5) :: CALL HCHAR(3,17,63,2) :: CALL HCHAR(5,17,63,2) :: CALL VCHAR(4,18,63)
290 CALL VCHAR(6,22,63,2) :: CALL VCHAR(3,20,63,2) :: CALL VCHAR(3,24,63,2) :: CALL HCHAR(5,21,63) :: CALL HCHAR(5,23,63)
300 CALL VCHAR(4,27,63,2) :: CALL VCHAR(4,29,63,2) :: CALL HCHAR(6,28,63) :: CALL HCHAR(3,26,63,5)
310 CALL HCHAR(7,26,63,5) :: DISPLAY AT(14,6):"@ BY CARSTEN ZIEPKE"
340 FOR I=1 TO 4 :: CALL COLOR(4,2,16) :: FOR K=1 TO 70 :: NEXT K :: CALL COLOR(4,16,2) :: FOR K=1 TO 70 :: NEXT K :: NEXT I
350 CALL MUSIK(LAE(),TON1(),TON2())
360 CALL COLOR(4,16,2)
370 CALL CLEAR!START
380 CALL CHAR(96,"00000E0E246F7FFCFC7F6F240E0E000000001C1C08FCFE3F3FFEFC081C1C0000")
390 CALL CHAR(100,"00003838103F7FFCFC7F3F10383800000000707024F6FE3F3FFEF62470700000")
400 CALL CHAR(104,"00000000397FCFCFCFCF7F39000000000000000098FCFFFFFFFFFC9800000000")
410 CALL CHAR(108,"00000000197FFFFFFFFF7F1900000000000000009CFEF3F3F3F3FE9C00000000")
420 CALL CHAR(112,"000C060387EB3B1F1F3BEB8703060C0000020CF8FEFCFCFEFEFCFCF8F80C0200")
430 CALL CHAR(116,"0020301F1F3F3F7F7F3F3F1F1F302000003060C0E1D7DCF8F8DCD7E1C0603000")
440 CALL CHAR(120,"00000000061F7FBFBF7F0000000000000000000000C1E3FEFCE0000000000000")
450 CALL CHAR(124,"00000000061F7FBFBF7F0000000000000000000000C0E0FCFEE3010000000000")
460 CALL CHAR(128,"0000013335170F0707030B1E080000000000009858D0E0C0C080A0F020000000")
470 CALL CHAR(132,"000000181C020F173F170F021C18000000000000103890F0E0F0903810000000")
480 CALL CHAR(136,"000000081C090F070F091C08000000000000183840F0E8FCE8F0403818000000")
490 CALL CHAR(92,"80603C1F0F1F7C3B0B0D0E1F1930200040E0E0F8FF7EB8D8BCDE59B8FCFC8E06")
500 CALL CHAR(88,"FFFFFFFFFFFFFFFF") :: CALL CHAR(40,"FFFFFFFFFFFFFFFF") :: CALL CHAR(142,"D66DD66DD66DD66D") :: CALL COLOR(8,15,15,2,5,5)
510 CALL COLOR(14,5,12)
520 DISPLAY AT(10,2)ERASE ALL BEEP :"SLOW OR FAST"
530 X$=""
540 CALL JOYST(1,ZZ,VV) :: IF ZZ=-4 THEN X$="S" ELSE IF ZZ=4 THEN X$="F"
550 IF X$="" THEN 540
560 IF X$="F" THEN 590
570 GFA=0 :: STU=1 :: SCHLANG=2 :: KAF1=4 :: KAF2=6 :: KAF3=8 :: LAST=2 :: RENN=5 :: PU=0 :: HI=HI :: TIME=0 :: LOCH=0 :: LEB=4
580 A$="SLOW" :: GOTO 610
590 GFA=0 :: STU=1 :: SCHLANG=6 :: KAF1=4 :: KAF2=6 :: KAF3=8 :: LAST=8 :: RENN=12 :: PU=0 :: HI=HI :: TIME=0 :: LOCH=0 :: LEB=4
600 A$="FAST"
610 CALL MAGNIFY(3)
620 CALL CLEAR :: FOR I=15 TO 22 :: CALL HCHAR(I,7,88,20) :: NEXT I
630 CALL HCHAR(13,7,142,20) :: CALL HCHAR(14,7,142,20)
640 FOR I=5 TO 12 :: CALL HCHAR(I,7,40,20) :: NEXT I
650 DISPLAY AT(2,1)SIZE(5):"SCORE" :: DISPLAY AT(3,1)SIZE(6):PU
660 DISPLAY AT(2,8)SIZE(4):"FROG" :: DISPLAY AT(3,8)SIZE(2):LEB
670 DISPLAY AT(2,14)SIZE(5):"LEVEL" :: DISPLAY AT(3,14)SIZE(2):STU
680 DISPLAY AT(2,21)SIZE(8):"HISCORE" :: DISPLAY AT(3,21)SIZE(6):HI :: DISPLAY AT(24,5):A$
690 CALL SPRITE(#1,128,16,176,120)
700 GOSUB 1540
710 CALL SOUND(-1000,261,0,293,0,329,0)
720 CALL JOYST(1,ZZ,VV)
730 TIME=TIME+1 :: IF TIME>120 THEN 1400
740 IF ZZ=-4 THEN GOTO 840
750 IF ZZ=4 THEN GOTO 910
760 IF VV=4 THEN GOTO 980
770 IF VV=-4 THEN GOTO 1100
780 CALL POSITION(#1,XX,YY)
790 IF YY<48 OR YY>198 THEN 1400
800 CALL POSITION(#1,XX,YY) :: CALL COINC(ALL ,COI) :: IF XX>95 AND COI=-1 THEN 1400
810 IF XX<96 AND COI=0 THEN 1400
820 IF XX<96 AND COI=-1 THEN GOSUB 1490
830 GOTO 720
840 CALL POSITION(#1,XX,YY)
850 IF YY<48 OR YY>198 THEN 1400
860 CALL LOCATE(#1,XX,YY-16) :: CALL PATTERN(#1,132)
870 CALL COINC(ALL ,COI) :: CALL POSITION(#1,XX,YY)
880 IF XX>95 AND COI=-1 THEN 1400
890 IF XX<96 AND COI=0 THEN 1400
900 GOTO 720
910 CALL POSITION(#1,XX,YY)
920 IF YY<48 OR YY>198 THEN 1400
930 CALL LOCATE(#1,XX,YY+16) :: CALL PATTERN(#1,136)
940 CALL COINC(ALL ,COI) :: CALL POSITION(#1,XX,YY)
950 IF XX>95 AND COI=-1 THEN 1400
960 IF XX<96 AND COI=0 THEN 1400
970 GOTO 720
980 CALL POSITION(#1,XX,YY)
990 CALL MOTION(#1,0,0)
1000 IF YY<48 OR YY>198 THEN 1400
1010 PU=PU+15
1020 IF XX-16<32 THEN 1210
1030 CALL LOCATE(#1,XX-16,YY)
1040 CALL PATTERN(#1,128)
1050 CALL COINC(ALL ,COI) :: CALL POSITION(#1,XX,YY)
1060 IF XX>95 AND COI=-1 THEN 1400
1070 IF XX<96 AND COI=0 THEN 1400
1080 IF XX<96 AND COI=-1 THEN GOSUB 1490
1090 GOTO 720
1100 CALL POSITION(#1,XX,YY)
1110 PU=PU+15
1120 CALL MOTION(#1,0,0)
1130 IF YY<48 OR YY>198 THEN 1400
1140 CALL LOCATE(#1,XX+16,YY)
1150 CALL PATTERN(#1,128)
1160 CALL COINC(ALL ,COI) :: CALL POSITION(#1,XX,YY)
1170 IF XX>95 AND COI=-1 THEN 1400
1180 IF XX<96 AND COI=0 THEN 1400
1190 IF XX<96 AND COI=-1 THEN GOSUB 1490
1200 GOTO 720
1210 CALL SOUND(400,165,0,196,0,220,0) :: CALL SOUND(600,262,0,330,0,392,0)
1220 LOCH=LOCH+1 :: CALL SPRITE(#1,128,16,XX-16,YY)
1230 NPU=PU+(500-TIME)+500
1240 DISPLAY AT(2,1)SIZE(5):"SCORE" :: FOR KK=PU TO NPU STEP 88 :: DISPLAY AT(3,1)SIZE(6):KK :: NEXT KK :: PU=NPU
1250 DISPLAY AT(2,8)SIZE(4):"FROG" :: DISPLAY AT(3,8)SIZE(2):LEB
1260 DISPLAY AT(2,14)SIZE(5):"LEVEL" :: DISPLAY AT(3,14)SIZE(2):STU
1270 DISPLAY AT(2,21)SIZE(8):"HISCORE" :: DISPLAY AT(3,21)SIZE(6):HI
1280 IF LOCH=4 THEN 1310
1290 CALL SPRITE(#1,128,16,176,120) :: TIME=0
1300 GOTO 710
1310 STU=STU+1 :: LOCH=0 :: TIME=0 :: PU=PU+1500 :: IF STU/2=INT(STU/2)THEN LEB=LEB+1
1320 CALL DELSPRITE(ALL) :: IF STU>3 THEN 1350
1330 LAST=LAST+3 :: RENN=RENN+3.5 :: SCHLANG=SCHLANG+2.75
1340 GOTO 650
1350 IF STU=4 THEN 650 ELSE IF STU=5 THEN SCHLANG=SCHLANG-2.75 :: GOTO 650
1360 IF STU=6 THEN GFA=1 :: GOTO 650
1370 IF STU=7 THEN GFA=2 :: GOTO 650
1380 IF STU=8 THEN GFA=3 :: GOTO 650
1390 IF STU>8 THEN KAF1=KAF1+1 :: KAF2=KAF2+1 :: KAF3=KAF3+1 :: GOTO 650
1400 CALL PATTERN(#1,92) :: FOR HHH=0 TO 30 STEP 2 :: CALL SOUND(-200,-6,HHH) :: NEXT HHH
1410 LEB=LEB-1 :: IF LEB=0 THEN 1430
1420 TIME=0 :: CALL DELSPRITE(ALL) :: GOTO 650
1430 CALL DELSPRITE(ALL)
1440 IF PU>HI THEN HI=PU
1450 DISPLAY AT(12,10)SIZE(9):"GAME OVER" :: CALL MUSIK(LAE(),TON1(),TON2())
1460 GOTO 520
1470 NEXT I
1480 GOTO 1450
1490 IF XX=80 THEN CALL MOTION(#1,0,-KAF2) :: RETURN
1500 IF XX=64 THEN CALL MOTION(#1,0,KAF1) :: RETURN
1510 IF XX=48 THEN CALL MOTION(#1,0,-KAF2) :: RETURN
1520 IF XX=32 THEN CALL MOTION(#1,0,KAF3) :: RETURN
1530 !
1540 CALL SPRITE(#2,104,2,160,50,0,-LAST)
1550 CALL SPRITE(#3,104,2,160,120,0,-LAST)
1560 CALL SPRITE(#4,104,2,160,192,0,-LAST)
1570 CALL SPRITE(#5,100,2,144,70,0,RENN)
1580 CALL SPRITE(#6,100,2,144,129,0,RENN)
1590 CALL SPRITE(#7,100,2,144,190,0,RENN)
1600 CALL SPRITE(#8,96,2,128,50,0,-RENN)
1610 CALL SPRITE(#9,96,2,128,120,0,-RENN)
1620 CALL SPRITE(#10,96,2,128,170,0,-RENN)
1630 CALL SPRITE(#11,108,2,112,60,0,LAST)
1640 CALL SPRITE(#12,108,2,112,120,0,LAST)
1650 CALL SPRITE(#13,108,2,112,160,0,LAST)
1660 IF STU<2 THEN 1720
1670 CALL SPRITE(#28,124,2,96,192,0,-SCHLANG)
1680 IF STU<3 THEN 1720
1690 CALL SPRITE(#27,120,2,96,120,0,-SCHLANG)
1700 IF STU<4 THEN 1720
1710 CALL SPRITE(#26,124,2,96,70,0,-SCHLANG)
1720 CALL SPRITE(#14,112,2,80,60,0,-KAF2)
1730 CALL SPRITE(#15,112,2,80,140,0,-KAF2)
1740 CALL SPRITE(#16,112,2,80,180,0,-KAF2)
1750 CALL SPRITE(#17,116,2,64,76,0,KAF1)
1760 CALL SPRITE(#18,116,2,64,160,0,KAF1)
1770 CALL SPRITE(#19,116,2,64,196,0,KAF1)
1780 CALL SPRITE(#20,112,2,48,110,0,-KAF2)
1790 CALL SPRITE(#21,112,2,48,150,0,-KAF2)
1800 CALL SPRITE(#22,112,2,48,180,0,-KAF2)
1810 CALL SPRITE(#23,116,2,32,50,0,KAF3)
1820 CALL SPRITE(#24,116,2,32,100,0,KAF3)
1830 CALL SPRITE(#25,116,2,32,150,0,KAF3)
1840 IF GFA>0 THEN CALL DELSPRITE(#15,#22)
1850 IF GFA>1 THEN CALL DELSPRITE(#23)
1860 IF GFA>2 THEN CALL DELSPRITE(#19)
1870 RETURN
1880 !@P+
1890 SUB MUSIK(LAE(),TON1(),TON2())
1900 FOR I=1 TO 38 :: CALL SOUND(LAE(I),TON1(I),0,TON1(I),0,TON2(I),0)
1910 CALL KEY(1,K,S) :: IF S<>0 THEN SUBEXIT
1920 NEXT I
1930 GOTO 1900
1940 SUBEND
